package pe.com.hermes.hermetic.web.controller.consultas;

import java.io.InputStream;
import java.io.OutputStream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.beans.DetallePedidoBean;
import pe.com.hermes.hermetic.beans.PedidosBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.controller.base.IWebOpciones;
import pe.com.hermes.hermetic.web.forms.HMF3005Form;

import pe.com.hermes.hermetic.web.forms.HMF3005Form;
import pe.com.hermes.hermetic.web.forms.HMF3005MostrarForm;

import java.util.List;

import java.util.Map;

import java.util.Set;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.apache.log4j.Logger;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import pe.com.hermes.hermetic.beans.ClienteCorpBean;
import pe.com.hermes.hermetic.beans.ConfBean;
//import pe.com.hermes.hermetic.beans.ConsultaPedidoBean;
import pe.com.hermes.hermetic.beans.DenominacionMonedaBean;
import pe.com.hermes.hermetic.beans.DetalleIngresosBean;
import pe.com.hermes.hermetic.beans.SucursalBean;
import pe.com.hermes.hermetic.beans.TiposBean;
import pe.com.hermes.hermetic.beans.User;
import pe.com.hermes.hermetic.negocio.managerimpl.pedido.atm.PedidoAtmContainerManagerImpl;
import pe.com.hermes.hermetic.negocio.managerimpl.pedido.tv.PedidoTvContainerManagerImpl;
import pe.com.hermes.hermetic.negocio.managerimpl.pedido.tv.PedidoTvManagerImpl;
import pe.com.hermes.hermetic.negocio.service.ClienteService;
import pe.com.hermes.hermetic.negocio.service.ConfiguracionService;
import pe.com.hermes.hermetic.negocio.service.PedidoService;
import pe.com.hermes.hermetic.negocio.service.TablService;
import pe.com.hermes.hermetic.web.forms.HMF2003Form;
import pe.com.hermes.hermetic.web.forms.HMF2014Form;
import pe.com.hermes.hermetic.web.forms.HMF2015Form;
import pe.com.hermes.hermetic.web.forms.HMF4023Form;
import pe.com.hermes.unidadesnegocio.general.entities.TipoEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.DenominacionEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoDenoEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoDetaEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.PedidoEntity;


/**** Modificado 20101116 YNFR *****/

@RequestMapping("/mostrarHWF3005.html")
@Controller
@SessionAttributes(value={"form","codOpci","desOpci"})
public class PedidoController implements IController{

        private Logger logger = Logger.getLogger(this.getClass());
        
        @Autowired
        private HermeticFacade servicioHermetic;
        
        @Autowired
        private TablService tablService;
        
        @Autowired
        private ClienteService clienteService;
        
        @Autowired
        private ConfiguracionService configuracionService;
       
        @Autowired
        private PedidoService pedidoService;
       
       
        
        @RequestMapping(method=RequestMethod.GET)
        protected String showForm(ModelMap model, HttpServletRequest request) throws Exception {
            logger.info(" metodo:  showForm");

          HttpSession session = request.getSession(false);
          User user = Util.getUser();
          if (request.getSession().getAttribute("usuario") == null)
              return FORM_SESSION_FINISH;

 
          String sucursal = (String)request.getSession().getAttribute("sucursal");

          HMF3005Form form = new HMF3005Form();
          form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);

          try {
              String fecha = servicioHermetic.getFechaHoy();
              String horaServidor =  servicioHermetic.getFecha2().substring(8, 13);
              Integer tipClie = (Integer)session.getAttribute("tipClie");
              String listClie = (String)session.getAttribute("listClie");
              String cliente = (String)request.getSession().getAttribute("listClie");
              Integer boveBanc = (Integer)session.getAttribute("boveBanc");
              Integer boveProp = (Integer)session.getAttribute("boveProp");
              logger.info(" tipClie :" + tipClie);
              logger.info(" listClie :" + listClie);
              logger.info(" boveBanc :" + boveBanc);
              logger.info(" boveProp :" + boveProp);
              form.setFechadesde(fecha);
              form.setFechahasta(fecha);
              form.setFecha(fecha);
              form.setHora(horaServidor);
              form.setCliente(cliente);
              form.setSucursal(sucursal);
              form.setTipFecha("1");
              
              logger.info("cliente:"+cliente);
              String clienteEleg=cliente;
              List<ClienteCorpBean> listClientes = new ArrayList<ClienteCorpBean>();
              if (tipClie==ConstantesHermetic.TIPO_CLIE_CORP){
                String codCorp = (Integer)request.getSession(false).getAttribute("codCorp") + "";
                int codSucuHtb = Integer.parseInt(sucursal);
                if (codSucuHtb == 1) codSucuHtb =0;
                listClientes = clienteService.getListClieCntaByCorp(Integer.parseInt(codCorp), codSucuHtb, "");
                if (listClientes.size() > 0){
                  ClienteCorpBean objCliente = listClientes.get(0);
                  if (objCliente.getListCodCliente().split(",").length == 1)
                      clienteEleg = objCliente.getListCodCliente();
                  else
                      clienteEleg = configuracionService.getCodClieEleg(objCliente.getListCodCliente(), 0, Integer.parseInt(ConstantesHermetic.TIP_PROC_REG_PEDI_TV)) +"";
                }
              }else{
                if (cliente.split(",").length > 1)
                    clienteEleg = configuracionService.getCodClieEleg(cliente, 0, Integer.parseInt(ConstantesHermetic.TIP_PROC_REG_PEDI_TV)) +"";
              }
              
              logger.info("cliente elegido :"+clienteEleg);
              
              
              
              if (!user.getCodSucuHtb().equals(COD_SUCU_PRINCIPAL)) {
                  form.setCodSucursal(user.getCodSucuHtb());
                  form.setDesSucursal(user.getDesSucuHtb());
              }
              
              if (tipClie.equals(TIPO_CLIENTE_COMERCIAL) || tipClie.equals(TIPO_CLIENTE_BANCO)) {
                  form.setLblCliente(LBL_CLIENTE);
              } else if (tipClie.equals(TIPO_CLIENTE_CORPORACION) ) {
                  form.setLblCliente(LBL_CORPORACION);
              }
              // listando todas las variables por defecto
              /* todas las sucursales por defecto*/
              List<SucursalBean> listSucursales = servicioHermetic.getListSucursalesCC("%",listClie);
              String[] chksSucu = new String[listSucursales.size()];
              int idx=0;
              for(SucursalBean sucursalBean :listSucursales){
                  chksSucu[idx]=sucursalBean.getCodSucursal();
                  idx++;
              }
              listSucursales = Util.setChksSession(chksSucu, listSucursales);  
              session.setAttribute("chksSucu",chksSucu);
              List listadoUnidMone = tablService.getTiposDinamico(Integer.parseInt(ConstantesHermetic.COD_TIPO_UNID_MONE), ConstantesHermetic.IND_TIPO_UNID_MONE, ConstantesHermetic.CAMP_UNID_MONE);
              List<TiposBean> listOrigen = tablService.getTiposDinamico(ConstantesHermetic.TIPO_PROC, ConstantesHermetic.IND_TIPO_CCOM, ConstantesHermetic.CAMP_TIPO_CCOM);
              List<TiposBean> listTiposFechas = tablService.getTiposDinamico(Integer.parseInt(ConstantesHermetic.COD_TIPO_FECH), ConstantesHermetic.IND_TIPO_FECH_1, ConstantesHermetic.CAMP_FECH);
              List listTipoPedido= tablService.getTiposDinamico(ConstantesHermetic.TIPO_TIPO_PEDIDO, ConstantesHermetic.IND_TIPO_PEDI, ConstantesHermetic.CAMP_PEDI);
              List listTipoRegPedi = tablService.getTiposDinamico(ConstantesHermetic.TIPO_INGR_PEDI, ConstantesHermetic.IND_TIPO_PEDI, ConstantesHermetic.CAMP_PEDI);
              
              //logger.info(" cant de items :"+listTiposFechas.size());
              List listTiposFechasNew  = new ArrayList();
              for(TiposBean bean : listTiposFechas){
                  if(bean.getCodigo().equals(ConstantesHermetic.TIP_FEC_ATEN) ||  bean.getCodigo().equals(ConstantesHermetic.TIP_FEC_SOLI)){
                      listTiposFechasNew.add(bean);
                  }
              }
              
              logger.info(" cant de pedidos obtenidos :"+listTipoPedido.size());
              
              //listTiposFechas=listTiposFechas.subList(0, 2);
              model.put("listadoUnidMone", listadoUnidMone);
              List listEstados = tablService.getListEstadosGeneral(ConstantesHermetic.COD_ESTD_ESTD_PEDI+"");
              for (int i = 0; i < listEstados.size(); i++) {
                  if (((TiposBean)listEstados.get(i)).getCodigo().equals("4"))
                      listEstados.remove(i);
              }
              form.setListEstados(listEstados);
              if (listEstados != null) {
                  model.put("listEstados", listEstados);
              }




              form.setDesEstdRepo("");
              form.setDesUnidMoneRepo("");
              form.setDesTipFecRepo("");
              AuditBean auditBean = new AuditBean(DETA_INGR_CC);
              //servicioHermetic.inseAudit(auditBean);
              session.setAttribute("chksBanco", null);
              session.setAttribute("chksPunto", null);
              session.setAttribute("chksModulo", null);
              session.setAttribute("chksCuentasIS", null);
              session.removeAttribute("tipoUnidMone");
              session.setAttribute("codSucuSelect", user.getCodSucuHtb());
              session.setAttribute("COD_SUCU_PRINCIPAL", COD_SUCU_PRINCIPAL);
              session.setAttribute("TIPO_CLIENTE_CORPORACION",TIPO_CLIENTE_CORPORACION);
              session.setAttribute("TIPO_CLIENTE_COMERCIAL",TIPO_CLIENTE_COMERCIAL);
              session.setAttribute("TIPO_CLIENTE_BANCO",TIPO_CLIENTE_BANCO);
              session.setAttribute("COD_TIPO_BOVEDA_PROPIA",COD_TIPO_BOVEDA_PROPIA);
              session.setAttribute("COD_TIPO_BOVEDA_BANCO",COD_TIPO_BOVEDA_BANCO);
              session.setAttribute("SELECT_TODOS", SELECT_TODOS);
              session.setAttribute("SELECT_ALGUNOS", SELECT_ALGUNOS);
              session.setAttribute("listOrigen", listOrigen);
              session.setAttribute("listTiposFechas", listTiposFechas);
              session.setAttribute("listEstados", listEstados);
              session.setAttribute("chksPunto", null);
              session.setAttribute("chksBanco",null);
              session.setAttribute("chksCuentasIS",null);
              session.setAttribute("chksClieCorp",null);
              session.setAttribute("clienteEleg", clienteEleg);
              String codOpci = IWebOpciones.DETA_INGR_CC;
              String desOpci = servicioHermetic.getDesOpci(codOpci, request);
              model.put("codOpci", codOpci);
              model.put("mostrarLista", 2);
              model.put("desOpci", desOpci);
              model.put("listOrigen", listOrigen);
              model.put("listTiposFechas", listTiposFechasNew);
              model.put("listTipoRegPedi", listTipoRegPedi);
              model.put("listTipoPedido",listTipoPedido);
              model.put(FORM_KEY, form);
          } catch (Exception e) {
              e.printStackTrace();
              logger.error("Error en el proceso. " + e);
              return FORM_PEDIDO_VIEW;
          }
          return FORM_PEDIDO_VIEW;
        }

        @RequestMapping(params = {"accion=mostrar", "listCodCliente", "listCodSucusal", "listCodPunto", "codOrigen", "listCodBanco", "tipPed", "tipoRegPedi", "estado", "tipoFecha", "fechaInicio", "fechaFin","numPedi"})
        protected String mostrar(
                        @RequestParam("listCodCliente") String listCodCliente,
                        @RequestParam("listCodSucusal") String listCodSucusal,
                        @RequestParam("listCodPunto") String listCodPunto,
                        @RequestParam("codOrigen") String codOrigen,
                        @RequestParam("listCodBanco") String listCodBanco,
                        @RequestParam("tipPed") String tipPed,
                        @RequestParam("tipoRegPedi") String tipoRegPedi,
                        @RequestParam("estado") String estado,
                        @RequestParam("tipoFecha") String tipoFecha,
                        @RequestParam("fechaInicio") String fechaInicio,
                        @RequestParam("fechaFin") String fechaFin,
                        @RequestParam("numPedi") String numPedi,
                        ModelMap model, HttpServletRequest request) throws Exception {
                       logger.info("metodo : mostrar");
                       
                  try {
                      
                      String[] chksClieCorp =(String[])request.getSession(false).getAttribute("chksClieCorp");
                      String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
                      String[] chksPunto =(String[])request.getSession(false).getAttribute("chksPunto");
                      String[] chksBanco =(String[])request.getSession(false).getAttribute("chksBanco");
                      String[] chksCuentasIS =(String[])request.getSession(false).getAttribute("chksCuentasIS");
                      String listClie=(String)request.getSession(false).getAttribute("listClie");
                      String codSucursal=(String)request.getSession(false).getAttribute("sucursal");
                      Integer tipClie = (Integer)request.getSession(false).getAttribute("tipClie");
                      
                      request.getSession(false).setAttribute("codOrigen", codOrigen);
                      request.getSession(false).setAttribute("fechaDesde", fechaInicio);
                      request.getSession(false).setAttribute("fechaHasta", fechaFin);
                      

                      String _listCodSucusal=null;
                      String _listCodPunto=null;
                      String _listCodBanco=null;
                      String _tipPed=null;
                      String _listCodCliente=null;
                      String _tipoRegPedi=null;
                      String _estado=null;
                      String _numPedi=null;
                      String _codOrigen=null;
                      String _tipoFecha=null;
                      
                    
                      if(tipClie.equals(TIPO_CLIENTE_CORPORACION)){
                          if(listCodCliente.equals(String.valueOf(SELECT_TODOS))){
                              int codCorp = (Integer)request.getSession(false).getAttribute("codCorp");       
                              String usuWeb = (String)request.getSession(false).getAttribute("usuario");
                              List lista = clienteService.getListClieByCorp(codCorp,usuWeb,"");
                              String[] chks = Util.listToStringArray(lista);
                              _listCodCliente = Util.arrayToString(chks, ",");
                          }else if(listCodCliente.equals(String.valueOf(SELECT_ALGUNOS))){
                            _listCodCliente= Util.arrayToString(chksClieCorp, ",");       
                          }
                      }else{
                          _listCodCliente=listClie;
                      }
                      
                    if(!numPedi.trim().equals("")){
                      _numPedi=numPedi;
                    }else{
                        // parametro de sucursal
                        if(codSucursal.equals(COD_SUCU_PRINCIPAL)){
                            if(listCodSucusal.equals(String.valueOf(SELECT_ALGUNOS))){
                                _listCodSucusal=Util.arrayToString(chksSucu, ",");
                            }
                        }else{
                          _listCodSucusal=codSucursal;
                        }
                        //parametro de puntos
                        if(listCodPunto.equals(String.valueOf(SELECT_ALGUNOS))){
                          _listCodPunto=Util.arrayToString(chksPunto, ",");
                        }
                        if(codOrigen.equals(String.valueOf(COD_TIPO_BOVEDA_BANCO))){
                            //parametros de bancos
                            if(listCodBanco.equals(String.valueOf(SELECT_ALGUNOS))){
                              _listCodBanco=Util.arrayToString(chksBanco, ",");
                            }
                        }else if(codOrigen.equals(String.valueOf(COD_TIPO_BOVEDA_PROPIA))){
                            //cuentas 
                            if(!tipPed.equals(String.valueOf(SELECT_TODOS))){
                               _tipPed=tipPed;
                            }
                        }
                        if(!tipoRegPedi.equals(SELECT_TODOS+"")){
                           _tipoRegPedi= tipoRegPedi;
                        }
                        if(!estado.equals(SELECT_TODOS+"")){
                          _estado=estado;
                        }
                        _codOrigen=codOrigen;
                        _tipoFecha=tipoFecha;
                    }
                      
                      logger.info("lista de clientes "+_listCodCliente);
                      logger.info("lista de sucursales seleccionadas : " + _listCodSucusal);
                      logger.info("lista de listPuntos seleccionadas : " + _listCodPunto);
                      logger.info("lista de listBancos seleccionadas : " + _listCodBanco);
                      logger.info("lista de  codOrigen seleccionadas : " + _codOrigen);
                      logger.info("lista de listCuenta seleccionadas : " + _tipPed);
                      logger.info("lista de tipoRegPediseleccionadas : " + _tipoRegPedi);
                      logger.info("lista de estado     seleccionadas : " + _estado);
                      logger.info("lista de tipoFecha  seleccionadas : " + _tipoFecha);
                      logger.info("lista de fechaInicioseleccionadas : " + fechaInicio);
                      logger.info("lista de fechaFin   seleccionadas : " + fechaFin);
                      logger.info("lista de numPedi    seleccionadas : " + _numPedi);

                      HMF3005Form form = new HMF3005Form();
                      List<PedidoTvManagerImpl> listPedidos = servicioHermetic.getListPedidos(_listCodCliente,_listCodSucusal,_listCodPunto,_listCodBanco,_codOrigen,_tipPed,_tipoRegPedi,_estado,_tipoFecha,fechaInicio,fechaFin,_numPedi);
                      for(PedidoTvManagerImpl pedido : listPedidos){
                          logger.info("pedido : "+pedido.getNumPedi()+ "-"+pedido.getCodSeriPedi());
                          logger.info("usuAprob :"+pedido.getUsuAprob()+" usuRecep:"+pedido.getUsuRecep());
                          List<PedidoDetaEntity>  lispedidoDeta = (List)pedido.getDetasPedido();
                          List<PedidoDenoEntity>  listpedidoDeno = (List)pedido.getDenosPedido();
                          List<PedidoDenoEntity>  listpedidoDetaDeno = (List)pedido.getDenosDetaPedido();
                          logger.info(".. detalle");
                          for(PedidoDetaEntity pedidoDeta : lispedidoDeta){
                              logger.info(pedidoDeta.getBilletaje()+" .. monto pedido "+pedidoDeta.getMontPedi());
                          }
                          logger.info(".. denominaciones");
                          for(PedidoDenoEntity pedidoDeno: listpedidoDeno){
                            logger.info("..monto : "+pedidoDeno.getMontDeno()+" unidad monetaria :"+pedidoDeno.getUnidMone());
                          } 
                          
                          logger.info(".. deta denominaciones  ");
                          for(PedidoDenoEntity pedidoDeno: listpedidoDetaDeno){
                            logger.info("..monto : "+pedidoDeno.getMontDeno()+" unidad monetaria :"+pedidoDeno.getUnidMone() +"DENO: "+pedidoDeno.getDeno().getCanValoNomi()) ;
                          }  
                      }
                      model.put("listPedidos", listPedidos);
                      if(!listPedidos.isEmpty()) {
                          model.put("mostrarLista", 1);
                      }else{
                          model.put("mostrarLista", 0);
                      }
                      List<DenominacionMonedaBean> listDenoSoles =   servicioHermetic.getDenominacion(ConstantesHermetic.TIPO_MONEDA_SOLES);
                      List<DenominacionMonedaBean> listDenoDolares =   servicioHermetic.getDenominacion(ConstantesHermetic.TIPO_MONEDA_DOLARES);
                      List listadoUnidMone = tablService.getTiposDinamico(Integer.parseInt(ConstantesHermetic.COD_TIPO_UNID_MONE), ConstantesHermetic.IND_TIPO_UNID_MONE, ConstantesHermetic.CAMP_UNID_MONE);
                      request.getSession(false).setAttribute("listPedidos", listPedidos);
                      request.getSession(false).setAttribute("listUnidMone", listadoUnidMone);
                      request.getSession(false).setAttribute("listDenoSoles", listDenoSoles);
                      request.getSession(false).setAttribute("listDenoDolares", listDenoDolares);
                      model.put(FORM_KEY, form);
                  } catch (Exception e) {
                      e.printStackTrace();
                      return FORM_ERROR_VIEW;
                  }
                  return FORM_PEDIDO_VIEW;
          } 
        
        
        
        @RequestMapping(params="accion=mostrarExcelBB")
        protected void mostrarExcelBB(HttpServletRequest request,@ModelAttribute(FORM_KEY) HMF3005Form form,HttpServletResponse response)throws Exception{
            try{
                logger.info("entro al metodo");
                List<PedidoTvManagerImpl> listPedidos = (List)request.getSession(false).getAttribute("listPedidos");
                PedidoTvContainerManagerImpl pedidoContainer = new PedidoTvContainerManagerImpl();
                pedidoContainer.setPedidos(listPedidos);
                int tipClie = (Integer)request.getSession(false).getAttribute("tipClie");
                String desCorp = "";
                String desClie = "";
                
                if (tipClie == ConstantesHermetic.TIPO_CLIE_CORP){
                  desCorp = (String)request.getSession(false).getAttribute("desCorp");
                  if(form.getListClie().equals(SELECT_TODOS+""))desClie = "TODOS";
                  else{
                    String[] chksClieCorp = (String[])request.getSession(false).getAttribute("chksClieCorp");
                    List listClientes = (List)request.getSession(false).getAttribute("listClientesCorp");
                      for(int i=0;i<chksClieCorp.length;i++){
                          if(chksClieCorp[i]!=null){
                              for(int j=0;j<listClientes.size();j++){
                                  ClienteCorpBean bean = (ClienteCorpBean)listClientes.get(j);
                                  if(chksClieCorp[i].equals(bean.getListCodCliente())){
                                    if(i==0)desClie=bean.getDesRazoSoci();
                                    else desClie=desClie+"/"+bean.getDesRazoSoci();
                                  }
                              }
                          }
                      }
                  }
                }
                else{
                  desClie = (String)request.getSession(false).getAttribute("desRazoSoci");
                }
                
                
                
                String tipPedi = "";
                StringBuffer nomUsua = new StringBuffer();
                nomUsua.append(Util.getUser().getPriNomb()).append(" ");
                nomUsua.append(Util.getUser().getSegNomb()).append(" ");
                nomUsua.append(Util.getUser().getPriApel()).append(" ");
                nomUsua.append(Util.getUser().getSegApel());
                Map <Integer, Integer> mapMaxNive = new HashMap<Integer, Integer>();
                Map <Integer, Integer> mapUsuNive = new HashMap<Integer, Integer>();
                for(PedidoEntity pedidoBean : listPedidos){
                    tipPedi = pedidoBean.getTipPedi().getCodTipo();
                    if (mapMaxNive.get(pedidoBean.getClieOrig().getCodClie()) == null){
                      mapMaxNive.put(pedidoBean.getClieOrig().getCodClie(), configuracionService.getNumNiveAuto(pedidoBean.getClieGrup().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb()));
                      mapUsuNive.put(pedidoBean.getClieOrig().getCodClie(), configuracionService.getNiveAutoByUsua(Util.getUser().getUsuWeb(), pedidoBean.getClieGrup().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb()));
                    }
                }
                
                String fecha_srv = servicioHermetic.getFechaHoy();
                String hora_srv = servicioHermetic.getFecha2().substring(8, 13);
                String pathLogo = request.getSession().getServletContext().getRealPath("/images/logo.png");
                Map parameters = new HashMap();
                parameters.put("lst_data", pedidoContainer);
                parameters.put("tip_clie", tipClie);
                parameters.put("mapMax", mapMaxNive);
                parameters.put("mapUsu", mapUsuNive);
                parameters.put("des_corp", desCorp);
                parameters.put("des_clie", desClie);
                parameters.put("titulo", "REPORTE DE PEDIDOS");
                parameters.put("fec_soli", "");
                parameters.put("hor_soli", "");
                parameters.put("usuWeb",Util.getUser().getUsuWeb());
                parameters.put("nomUsua",nomUsua.toString());
                parameters.put("tipPedi", servicioHermetic.getDescripcion(ConstantesHermetic.TIPO_PEDIDO+"", tipPedi));
                parameters.put("fecha_srv",fecha_srv);
                parameters.put("hora_srv",hora_srv);
                parameters.put("logo_cabecera",pathLogo);
                
                HSSFWorkbook wb = new HSSFWorkbook(); 
                
                wb=pedidoService.excelSustentoPedidoCome(parameters);
                response.addHeader("Content-type", "application/vnd.ms-excel");
                response.addHeader("Content-Disposition", "attachment; filename=listReportUsuarios.xls");
                response.setContentType("Content-type: application/vnd.ms-excel");
                
                response.setHeader("Cache-Control","cache"); // HTTP 1.1
                response.setHeader("Pragma","cache"); // HTTP 1.0
                response.setDateHeader ("Expires", -1);  
                
                OutputStream out = response.getOutputStream();
                wb.write(out);
                out.close();
            }catch(Exception e){
                logger.error(e);
                e.printStackTrace();
            }
        }
        
        
    
  @RequestMapping(params="accion=mostrarExcel")
  protected void mostrarExcel(HttpServletRequest request,@ModelAttribute(FORM_KEY) HMF3005Form form,HttpServletResponse response)throws Exception{
      try{
          List<PedidoTvManagerImpl> listPedidos = (List)request.getSession(false).getAttribute("listPedidos");
          PedidoTvContainerManagerImpl pedidoContainer = new PedidoTvContainerManagerImpl();
          pedidoContainer.setPedidos(listPedidos);
          int tipClie = (Integer)request.getSession(false).getAttribute("tipClie");
          String desCorp = "";
          String desClie = "";

          String tipPedi = "";
          StringBuffer nomUsua = new StringBuffer();
          nomUsua.append(Util.getUser().getPriNomb()).append(" ");
          nomUsua.append(Util.getUser().getSegNomb()).append(" ");
          nomUsua.append(Util.getUser().getPriApel()).append(" ");
          nomUsua.append(Util.getUser().getSegApel());
          String nivAuto = "";
          Map <Integer, Integer> mapMaxNive = new HashMap<Integer, Integer>();
          Map <Integer, Integer> mapUsuNive = new HashMap<Integer, Integer>();
          for(PedidoEntity pedidoBean : listPedidos){
              tipPedi = pedidoBean.getTipPedi().getCodTipo();
              mapMaxNive.put(pedidoBean.getClieOrig().getCodClie(), configuracionService.getNumNiveAuto(pedidoBean.getClieOrig().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb()));
              mapUsuNive.put(pedidoBean.getClieOrig().getCodClie(), configuracionService.getNiveAutoByUsua(Util.getUser().getUsuWeb(), pedidoBean.getClieOrig().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb()));
              break;
          }
          if (tipClie == ConstantesHermetic.TIPO_CLIE_CORP){
            desCorp = (String)request.getSession(false).getAttribute("desCorp");
            if(form.getListClie().equals(SELECT_TODOS+""))desClie = "TODOS";
            else{
              String[] chksClieCorp = (String[])request.getSession(false).getAttribute("chksClieCorp");
              List listClientes = (List)request.getSession(false).getAttribute("listClientesCorp");
                for(int i=0;i<chksClieCorp.length;i++){
                    if(chksClieCorp[i]!=null){
                        for(int j=0;j<listClientes.size();j++){
                            ClienteCorpBean bean = (ClienteCorpBean)listClientes.get(j);
                            if(chksClieCorp[i].equals(bean.getListCodCliente())){
                              if(i==0)desClie=bean.getDesRazoSoci();
                              else desClie=desClie+"/"+bean.getDesRazoSoci();
                            }
                        }
                    }
                }
            }
          }
          else{
            nivAuto = mapUsuNive.get(Integer.parseInt(form.getCliente())) + " de " + mapMaxNive.get(Integer.parseInt(form.getCliente()));
            desClie = (String)request.getSession(false).getAttribute("desRazoSoci");
          }
          String fecha_srv = servicioHermetic.getFechaHoy();
          String hora_srv = servicioHermetic.getFecha2().substring(8, 13);
          String pathLogo = request.getSession().getServletContext().getRealPath("/images/logo.png");
          Map parameters = new HashMap();
          parameters.put("lst_data", pedidoContainer);
          parameters.put("tip_clie", tipClie);
          parameters.put("mapMax", mapMaxNive);
          parameters.put("niv_auto", nivAuto);
          parameters.put("mapUsu", mapUsuNive);
          parameters.put("des_corp", desCorp);
          parameters.put("des_clie", desClie);
          parameters.put("titulo", "REPORTE DE PEDIDOS");
          parameters.put("fec_soli", "");
          parameters.put("hor_soli", "");
          parameters.put("usuWeb",Util.getUser().getUsuWeb());
          parameters.put("nomUsua",nomUsua.toString());
          parameters.put("tipPedi", servicioHermetic.getDescripcion(ConstantesHermetic.TIPO_PEDIDO+"", tipPedi));
          parameters.put("fecha_srv",fecha_srv);
          parameters.put("hora_srv",hora_srv);
          parameters.put("logo_cabecera",pathLogo);
          
          HSSFWorkbook wb = new HSSFWorkbook(); 
          
          wb=pedidoService.excelSustentoPedido(parameters);
          response.addHeader("Content-type", "application/vnd.ms-excel");
          response.addHeader("Content-Disposition", "attachment; filename=listReportUsuarios.xls");
          response.setContentType("Content-type: application/vnd.ms-excel");
          
          response.setHeader("Cache-Control","cache"); // HTTP 1.1
          response.setHeader("Pragma","cache"); // HTTP 1.0
          response.setDateHeader ("Expires", -1);  
          
          OutputStream out = response.getOutputStream();
          wb.write(out);
          out.close();
      }catch(Exception e){
          logger.error(e);
          e.printStackTrace();
      }
  }
  
  
  
  @RequestMapping(params="accion=mostrarPDFBB")
  protected void mostrarPDFBB(HttpServletRequest request,@ModelAttribute(FORM_KEY) HMF3005Form form,HttpServletResponse response)throws Exception{
    try{
        HttpSession session = request.getSession(false);
        String rutaJasper = session.getServletContext().getInitParameter("rutajasper");
        StringBuffer jasperPath = new StringBuffer(rutaJasper).append("/").append("HMR2014").append(".jasper");
        int intTipCliente = (Integer)request.getSession(false).getAttribute("tipClie");  //0=corporacion; 1=banco; 2=cc
        Map map = new HashMap();
        Map subReportDS1 = new HashMap();
        JRDataSource simpleDS;
        String fecha_srv = servicioHermetic.getFechaHoy();
        String hora_srv = servicioHermetic.getFecha2().substring(8, 13);
        String fecSoliPedi = null;
        String horSoliPedi = null;
        String tipPedi = null;
        String desClie = "";
        List<PedidoTvManagerImpl> pedidosBean = (List)request.getSession(false).getAttribute("listPedidos");
        PedidoTvContainerManagerImpl pedidoContainer = new PedidoTvContainerManagerImpl();
        Collections.sort(pedidosBean);
        pedidoContainer.setPedidos(pedidosBean);
        simpleDS = new JRBeanCollectionDataSource(pedidosBean);
        Map <Integer, Integer> mapMaxNive = new HashMap<Integer, Integer>();
        Map <Integer, Integer> mapUsuNive = new HashMap<Integer, Integer>();
        Map <String, Double> sumaDenos = new HashMap<String,Double>();
        List keyClieList = new ArrayList();
        List keyGrupList = new ArrayList();
        Map<String,String> mapSimbolos = new HashMap<String,String>();
        List listUnidMone = tablService.getTiposDinamico(Integer.parseInt(ConstantesHermetic.COD_TIPO_UNID_MONE), ConstantesHermetic.IND_TIPO_ALL, ConstantesHermetic.CAMP_TIPO_CORT);
        for (TiposBean tipo : (List<TiposBean>)listUnidMone ){
          mapSimbolos.put(tipo.getCodigo(), tipo.getDescripcion());
        }
        for(PedidoEntity pedidoBean : pedidosBean){
            pedidoBean.getUnidMone().setDesTipoCort(mapSimbolos.get(pedidoBean.getUnidMone().getCodTipo()));
            fecSoliPedi = pedidoBean.getFecSoliPedi();
            horSoliPedi = pedidoBean.getHorSoliPedi();
            tipPedi = pedidoBean.getTipPedi().getCodTipo();
            if (mapMaxNive.get(pedidoBean.getClieOrig().getCodClie()) == null){
              mapMaxNive.put(pedidoBean.getClieOrig().getCodClie(), configuracionService.getNumNiveAuto(pedidoBean.getClieGrup().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb()));
              try{
                mapUsuNive.put(pedidoBean.getClieOrig().getCodClie(), configuracionService.getNiveAutoByUsua(Util.getUser().getUsuWeb(), pedidoBean.getClieGrup().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb()));
              }catch(Exception e){
                mapUsuNive.put(pedidoBean.getClieOrig().getCodClie(), 0);
              }
            }
            if (!keyClieList.contains(pedidoBean.getClieOrig().getCodClie())){
              keyClieList.add(pedidoBean.getClieOrig().getCodClie());
            }
            if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
              if (!keyGrupList.contains(pedidoBean.getClieGrup().getCodClie())){
                keyGrupList.add(pedidoBean.getClieGrup().getCodClie());
              }
            }
            List<PedidoDenoEntity> listDenoByTipUnidMone = pedidoService.getListDenosByUnidMone(pedidoBean.getUnidMone().getCodTipo());
            for(PedidoDenoEntity pedidoDenoBean: listDenoByTipUnidMone){
                String key = pedidoDenoBean.getDeno().getCodDeno()+"-"+pedidoBean.getUnidMone().getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                String keyClie = pedidoBean.getClieOrig().getCodClie()+"-"+pedidoDenoBean.getDeno().getCodDeno()+"-"+pedidoBean.getUnidMone().getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                String keyGrup = pedidoBean.getClieGrup().getCodClie()+"-"+pedidoDenoBean.getDeno().getCodDeno()+"-"+pedidoBean.getUnidMone().getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                pedidoDenoBean.setNomComp("Monto por denominacion");
                for (PedidoDenoEntity  pediDeno : pedidoBean.getDenosPedido()){
                    if ((pedidoDenoBean.getDeno().getCodDeno().intValue() == pediDeno.getDeno().getCodDeno().intValue())&& 
                        (pedidoBean.getUnidMone().getCodTipo().equals(pediDeno.getUnidMone().getCodTipo())) &&
                        (pedidoDenoBean.getTipMone().getCodTipo().equals(pediDeno.getTipMone().getCodTipo()))){
                      pedidoDenoBean.setMontDeno(pediDeno.getMontDeno());
                    }
                }
                if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
                if (sumaDenos.get(key) == null){
                  pedidoDenoBean.setUnidMone(pedidoBean.getUnidMone());
                  sumaDenos.put(key, pedidoDenoBean.getMontDeno());
                }else{
                  sumaDenos.put(key, sumaDenos.get(key) + pedidoDenoBean.getMontDeno());
                }
                if (sumaDenos.get(keyClie) == null){
                  sumaDenos.put(keyClie, pedidoDenoBean.getMontDeno());
                }else{
                  sumaDenos.put(keyClie, sumaDenos.get(keyClie) + pedidoDenoBean.getMontDeno());
                }
                if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
                  if (sumaDenos.get(keyGrup) == null){
                    sumaDenos.put(keyGrup, pedidoDenoBean.getMontDeno());
                  }else{
                    sumaDenos.put(keyGrup, sumaDenos.get(keyGrup) + pedidoDenoBean.getMontDeno());
                  }
                }
            }
            subReportDS1.put(pedidoBean.getCodSeriPedi()+"-"+pedidoBean.getNumPedi(),new JRBeanCollectionDataSource(listDenoByTipUnidMone));
        }
        if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
          for (Integer keyGrup : (List<Integer>)keyGrupList){
            Map mapAux = new HashMap();
            List listMone = new ArrayList();
            for (TipoEntity tipo : pedidoContainer.obtiListUnidMoneByDenos()){
              List<PedidoDenoEntity> listaDenos = pedidoService.getListDenosByUnidMone(tipo.getCodTipo());
              for(PedidoDenoEntity pedidoDenoBean: listaDenos){
                  String key = keyGrup+"-"+pedidoDenoBean.getDeno().getCodDeno()+"-"+tipo.getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                  tipo.setDesTipoCort(mapSimbolos.get(tipo.getCodTipo()));
                  pedidoDenoBean.setUnidMone(tipo);
                  pedidoDenoBean.setMontDeno(sumaDenos.get(key));
                  if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
                  pedidoDenoBean.setNomComp("Monto por denominacion");
              }
              listMone.add(tipo);
              mapAux.put(tipo.getCodTipo(), new JRBeanCollectionDataSource(listaDenos));
            }
            subReportDS1.put("MG"+keyGrup,new JRBeanCollectionDataSource(listMone));
            subReportDS1.put("DG"+keyGrup,mapAux);
          }
        }
        for (Integer keyClie : (List<Integer>)keyClieList){
          Map mapAux = new HashMap();
          List listMone = new ArrayList();
          for (TipoEntity tipo : pedidoContainer.obtiListUnidMoneByDenos()){
            List<PedidoDenoEntity> listaDenos = pedidoService.getListDenosByUnidMone(tipo.getCodTipo());
            for(PedidoDenoEntity pedidoDenoBean: listaDenos){
                String key = keyClie+"-"+pedidoDenoBean.getDeno().getCodDeno()+"-"+tipo.getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                tipo.setDesTipoCort(mapSimbolos.get(tipo.getCodTipo()));
                pedidoDenoBean.setUnidMone(tipo);
                pedidoDenoBean.setMontDeno(sumaDenos.get(key));
                if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
                pedidoDenoBean.setNomComp("Monto por denominacion");
            }
            listMone.add(tipo);
            mapAux.put(tipo.getCodTipo(), new JRBeanCollectionDataSource(listaDenos));
          }
          subReportDS1.put("M"+keyClie,new JRBeanCollectionDataSource(listMone));
          subReportDS1.put("D"+keyClie,mapAux);
        }
        Map mapAux = new HashMap();
        List listMone = new ArrayList();
        for (TipoEntity tipo : pedidoContainer.obtiListUnidMoneByDenos()){
          List<PedidoDenoEntity> listaDenos = pedidoService.getListDenosByUnidMone(tipo.getCodTipo());
          for(PedidoDenoEntity pedidoDenoBean: listaDenos){
              String key = pedidoDenoBean.getDeno().getCodDeno()+"-"+tipo.getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
              tipo.setDesTipoCort(mapSimbolos.get(tipo.getCodTipo()));
              pedidoDenoBean.setUnidMone(tipo);
              pedidoDenoBean.setMontDeno(sumaDenos.get(key));
              if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
              pedidoDenoBean.setNomComp("Monto por denominacion");
          }
          listMone.add(tipo);
          mapAux.put(tipo.getCodTipo(), new JRBeanCollectionDataSource(listaDenos));
        }
        subReportDS1.put("MTOTAL",new JRBeanCollectionDataSource(listMone));
        subReportDS1.put("DTOTAL",mapAux);
        StringBuffer nomUsua = new StringBuffer();
        nomUsua.append(Util.getUser().getPriNomb()).append(" ");
        nomUsua.append(Util.getUser().getSegNomb()).append(" ");
        nomUsua.append(Util.getUser().getPriApel()).append(" ");
        nomUsua.append(Util.getUser().getSegApel());
        if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
          map.put("nomCorp",(String)session.getAttribute("desCorp"));
          if(form.getListClie().equals(SELECT_TODOS+""))desClie = "TODOS";
          else{
            String[] chksClieCorp = (String[])request.getSession(false).getAttribute("chksClieCorp");
            List listClientes = (List)request.getSession(false).getAttribute("listClientesCorp");
              for(int i=0;i<chksClieCorp.length;i++){
                  if(chksClieCorp[i]!=null){
                      for(int j=0;j<listClientes.size();j++){
                          ClienteCorpBean bean = (ClienteCorpBean)listClientes.get(j);
                          if(chksClieCorp[i].equals(bean.getListCodCliente())){
                            if(i==0)desClie=bean.getDesRazoSoci();
                            else desClie=desClie+"/"+bean.getDesRazoSoci();
                          }
                      }
                  }
              }
          }
          map.put("nomClie",desClie);
        }else{
          map.put("nomCorp","");
          map.put("nomClie",(String)session.getAttribute("desRazoSoci"));
        }
        map.put("titulo", "SUSTENTO DEL REGISTRO DE PEDIDO");
        map.put("origen_repo", "CBB");
        map.put("mapMax", mapMaxNive);
        map.put("mapUsu", mapUsuNive);
        map.put("usuWeb",Util.getUser().getUsuWeb());
        map.put("nomUsua",nomUsua.toString());
        map.put("tipPedi", servicioHermetic.getDescripcion(ConstantesHermetic.TIPO_PEDIDO+"", tipPedi));
        map.put("fec_soli_pedi", fecSoliPedi);
        map.put("hor_soli_pedi",horSoliPedi);
        map.put("fec_srv",fecha_srv);
        map.put("hor_srv",hora_srv);
        map.put("subReportDS1",subReportDS1);
        map.put("contextPath",request.getSession().getServletContext().getRealPath("/"));
        ServletOutputStream servletOutputStream = response.getOutputStream();
        InputStream reportStream = session.getServletContext().getResourceAsStream(jasperPath.toString());
        byte[] bytes = null;        
        bytes = JasperRunManager.runReportToPdf(reportStream, map, simpleDS);
        response.setHeader("Cache-Control","cache"); // HTTP 1.1
        response.setHeader("Pragma","cache"); // HTTP 1.0
        response.setDateHeader ("Expires", -1);         
        response.setContentType("application/pdf");
        response.addHeader("Content-Disposition", "inline; filename=Reporte.pdf");        
        response.setContentLength(bytes.length);         
        servletOutputStream.write(bytes, 0, bytes.length);
        servletOutputStream.flush();
        servletOutputStream.close();
    }catch(Exception e){
            logger.error(e);
            e.printStackTrace();
        }
  }
  
  
  @RequestMapping(params="accion=mostrarPDFBP")
  protected void mostrarPDFBP(HttpServletRequest request,@ModelAttribute(FORM_KEY) HMF3005Form form,HttpServletResponse response)throws Exception{
    try{
        HttpSession session = request.getSession(false);
        String rutaJasper = session.getServletContext().getInitParameter("rutajasper");
        StringBuffer jasperPath = new StringBuffer(rutaJasper).append("/").append("HMR2003").append(".jasper");
        Map map = new HashMap();
        int intTipCliente = (Integer)request.getSession(false).getAttribute("tipClie");  //0=corporacion; 1=banco; 2=cc
        Map subReportDS1 = new HashMap();
        JRDataSource simpleDS;
        String fecha_srv = servicioHermetic.getFechaHoy();
        String hora_srv = servicioHermetic.getFecha2().substring(8, 13);
        String fecSoliPedi = null;
        String horSoliPedi = null;
        String tipPedi = null;
        String desClie = "";
        List<PedidoTvManagerImpl> pedidosBean = (List)request.getSession(false).getAttribute("listPedidos");
        PedidoTvContainerManagerImpl pedidoContainer = new PedidoTvContainerManagerImpl();
        Collections.sort(pedidosBean);
        pedidoContainer.setPedidos(pedidosBean);
        simpleDS = new JRBeanCollectionDataSource(pedidosBean);
        int maxNive = 0;
        int usuNive = 0;
        Map <Integer, Integer> mapMaxNive = new HashMap<Integer, Integer>();
        Map <Integer, Integer> mapUsuNive = new HashMap<Integer, Integer>();
        Map <String, Double> sumaDenos = new HashMap<String,Double>();
        Map<String,String> mapSimbolos = new HashMap<String,String>();
        List keyClieList = new ArrayList();
        List listUnidMone = tablService.getTiposDinamico(Integer.parseInt(ConstantesHermetic.COD_TIPO_UNID_MONE), ConstantesHermetic.IND_TIPO_ALL, ConstantesHermetic.CAMP_TIPO_CORT);
        for (TiposBean tipo : (List<TiposBean>)listUnidMone ){
          mapSimbolos.put(tipo.getCodigo(), tipo.getDescripcion());
        }
        for(PedidoEntity pedidoBean : pedidosBean){
            pedidoBean.getUnidMone().setDesTipoCort(mapSimbolos.get(pedidoBean.getUnidMone().getCodTipo()));
            fecSoliPedi = pedidoBean.getFecSoliPedi();
            horSoliPedi = pedidoBean.getHorSoliPedi();
            tipPedi = pedidoBean.getTipPedi().getCodTipo();
            if (mapMaxNive.get(pedidoBean.getClieOrig().getCodClie()) == null){
              maxNive = configuracionService.getNumNiveAuto(pedidoBean.getClieOrig().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb());
              mapMaxNive.put(pedidoBean.getClieOrig().getCodClie(), maxNive);
              try{
                usuNive = configuracionService.getNiveAutoByUsua(Util.getUser().getUsuWeb(), pedidoBean.getClieOrig().getCodClie(), pedidoBean.getClieOrig().getCodClie(), Integer.parseInt(pedidoBean.getTipProc().getCodTipo()), pedidoBean.getSucuHtb().getCodSucuHtb());
              }catch(Exception e){
                usuNive =0;
              }
              mapUsuNive.put(pedidoBean.getClieOrig().getCodClie(), usuNive);
            }
            if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
              if (!keyClieList.contains(pedidoBean.getClieOrig().getCodClie())){
                keyClieList.add(pedidoBean.getClieOrig().getCodClie());
              }
            }
            List<PedidoDenoEntity> listDenoByTipUnidMone = pedidoService.getListDenosByUnidMone(pedidoBean.getUnidMone().getCodTipo());
            for(PedidoDenoEntity pedidoDenoBean: listDenoByTipUnidMone){
                String key = pedidoDenoBean.getDeno().getCodDeno()+"-"+pedidoBean.getUnidMone().getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                String keyClie = pedidoBean.getClieOrig().getCodClie()+"-"+pedidoDenoBean.getDeno().getCodDeno()+"-"+pedidoBean.getUnidMone().getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                pedidoDenoBean.setNomComp("Monto por denominacion");
                for (PedidoDenoEntity  pediDeno : pedidoBean.getDenosPedido()){
                    if ((pedidoDenoBean.getDeno().getCodDeno().intValue() == pediDeno.getDeno().getCodDeno().intValue())&& 
                        (pedidoBean.getUnidMone().getCodTipo().equals(pediDeno.getUnidMone().getCodTipo())) &&
                        (pedidoDenoBean.getTipMone().getCodTipo().equals(pediDeno.getTipMone().getCodTipo()))){
                      pedidoDenoBean.setMontDeno(pediDeno.getMontDeno());
                    }
                }
                if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
                if (sumaDenos.get(key) == null){
                  pedidoDenoBean.setUnidMone(pedidoBean.getUnidMone());
                  sumaDenos.put(key, pedidoDenoBean.getMontDeno());
                }else{
                  sumaDenos.put(key, sumaDenos.get(key) + pedidoDenoBean.getMontDeno());
                }
                if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
                  if (sumaDenos.get(keyClie) == null){
                    sumaDenos.put(keyClie, pedidoDenoBean.getMontDeno());
                  }else{
                    sumaDenos.put(keyClie, sumaDenos.get(keyClie) + pedidoDenoBean.getMontDeno());
                  }
                }
            }
            subReportDS1.put(pedidoBean.getCodSeriPedi()+"-"+pedidoBean.getNumPedi(),new JRBeanCollectionDataSource(listDenoByTipUnidMone));
        }
        for (Integer keyClie : (List<Integer>)keyClieList){
          Map mapAux = new HashMap();
          List listMone = new ArrayList();
          for (TipoEntity tipo : pedidoContainer.obtiListUnidMoneByDenos()){
            List<PedidoDenoEntity> listaDenos = pedidoService.getListDenosByUnidMone(tipo.getCodTipo());
            for(PedidoDenoEntity pedidoDenoBean: listaDenos){
                String key = keyClie+"-"+pedidoDenoBean.getDeno().getCodDeno()+"-"+tipo.getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
                tipo.setDesTipoCort(mapSimbolos.get(tipo.getCodTipo()));
                pedidoDenoBean.setUnidMone(tipo);
                pedidoDenoBean.setMontDeno(sumaDenos.get(key));
                if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
                pedidoDenoBean.setNomComp("Monto por denominacion");
            }
            listMone.add(tipo);
            mapAux.put(tipo.getCodTipo(), new JRBeanCollectionDataSource(listaDenos));
          }
          subReportDS1.put("M"+keyClie,new JRBeanCollectionDataSource(listMone));
          subReportDS1.put("D"+keyClie,mapAux);
        }
        Map mapAux = new HashMap();
        List listMone = new ArrayList();
        for (TipoEntity tipo : pedidoContainer.obtiListUnidMoneByDenos()){
          List<PedidoDenoEntity> listaDenos = pedidoService.getListDenosByUnidMone(tipo.getCodTipo());
          for(PedidoDenoEntity pedidoDenoBean: listaDenos){
              String key = pedidoDenoBean.getDeno().getCodDeno()+"-"+tipo.getCodTipo()+"-"+pedidoDenoBean.getTipMone().getCodTipo();
              pedidoDenoBean.setMontDeno(sumaDenos.get(key));
              pedidoDenoBean.setUnidMone(tipo);
              pedidoDenoBean.getUnidMone().setDesTipoCort(mapSimbolos.get(tipo.getCodTipo()));
              if (pedidoDenoBean.getMontDeno() == null) pedidoDenoBean.setMontDeno(new Double(0));
              pedidoDenoBean.setNomComp("Monto por denominacion");
          }
          listMone.add(tipo);
          mapAux.put(tipo.getCodTipo(), new JRBeanCollectionDataSource(listaDenos));
        }
        subReportDS1.put("MTOTAL",new JRBeanCollectionDataSource(listMone));
        subReportDS1.put("DTOTAL",mapAux);
        StringBuffer nomUsua = new StringBuffer();
        nomUsua.append(Util.getUser().getPriNomb()).append(" ");
        nomUsua.append(Util.getUser().getSegNomb()).append(" ");
        nomUsua.append(Util.getUser().getPriApel()).append(" ");
        nomUsua.append(Util.getUser().getSegApel());
        if (intTipCliente == ConstantesHermetic.TIPO_CLIE_CORP){
          map.put("nomCorp",(String)session.getAttribute("desCorp"));
          if(form.getListClie().equals(SELECT_TODOS+""))desClie = "TODOS";
          else{
            String[] chksClieCorp = (String[])request.getSession(false).getAttribute("chksClieCorp");
            List listClientes = (List)request.getSession(false).getAttribute("listClientesCorp");
              for(int i=0;i<chksClieCorp.length;i++){
                  if(chksClieCorp[i]!=null){
                      for(int j=0;j<listClientes.size();j++){
                          ClienteCorpBean bean = (ClienteCorpBean)listClientes.get(j);
                          if(chksClieCorp[i].equals(bean.getListCodCliente())){
                            if(i==0)desClie=bean.getDesRazoSoci();
                            else desClie=desClie+"/"+bean.getDesRazoSoci();
                          }
                      }
                  }
              }
          }
          map.put("nomClie",desClie);
        }else{
          map.put("nomCorp","");
          map.put("nomClie",(String)session.getAttribute("desRazoSoci"));
        }
        if (usuNive != 0 && maxNive != 0){
          map.put("nivAuto", usuNive + " de " + maxNive);
        }else{
          map.put("nivAuto", "");
        }
        map.put("titulo", "SUSTENTO DEL REGISTRO DE PEDIDO");
        map.put("origen_repo", "CBP");
        map.put("usuWeb",Util.getUser().getUsuWeb());
        map.put("nomUsua",nomUsua.toString());
        map.put("tipPedi", servicioHermetic.getDescripcion(ConstantesHermetic.TIPO_PEDIDO+"", tipPedi));
        map.put("fec_soli_pedi", fecSoliPedi);
        map.put("hor_soli_pedi",horSoliPedi);
        map.put("fec_srv",fecha_srv);
        map.put("hor_srv",hora_srv);
        map.put("subReportDS1",subReportDS1);
        map.put("contextPath",request.getSession().getServletContext().getRealPath("/"));
        ServletOutputStream servletOutputStream = response.getOutputStream();
        InputStream reportStream = session.getServletContext().getResourceAsStream(jasperPath.toString());
        byte[] bytes = null;        
        bytes = JasperRunManager.runReportToPdf(reportStream, map, simpleDS);
        response.setHeader("Cache-Control","cache"); // HTTP 1.1
        response.setHeader("Pragma","cache"); // HTTP 1.0
        response.setDateHeader ("Expires", -1);         
        response.setContentType("application/pdf");
        response.addHeader("Content-Disposition", "inline; filename=Reporte.pdf");        
        response.setContentLength(bytes.length);         
        servletOutputStream.write(bytes, 0, bytes.length);
        servletOutputStream.flush();
        servletOutputStream.close();
    }catch(Exception e){
        logger.error(e);
        e.printStackTrace();
    }
    
  }
  
  
    //codSeriPedi:codSeriPedi,numPedi:numPedi,tipDocuPedi:tipDocuPedi
        @RequestMapping(params={"accion=openDetallePedido","codSeriPedi","numPedi","tipDocuPedi"})
        protected String openDetallePedido(@RequestParam("codSeriPedi") String codSeriPedi,@RequestParam("numPedi") Integer numPedi,@RequestParam("tipDocuPedi") String tipDocuPedi,   HttpServletRequest request,ModelMap model){
          logger.info(" metodo : openDetallePedido");
          try{
            List<ConfBean> listEstPedido = new ArrayList();
            String clienteEleg = (String)request.getSession(false).getAttribute("clienteEleg");
            String codTipoPedi = "";
            if(tipDocuPedi!=null){
              codTipoPedi= tipDocuPedi.split("-")[0];
            }
              
            listEstPedido =  pedidoService.getEstaLogNivPedi(codTipoPedi, String.valueOf(numPedi), codSeriPedi);
            
            logger.info(" codSeriPedi :"+codSeriPedi);
            logger.info("     numPedi :"+numPedi);
            logger.info(" tipDocuPedi :"+tipDocuPedi);
            
            List<PedidoTvManagerImpl> listPedidos = (List)request.getSession(false).getAttribute("listPedidos");
            if (listPedidos==null){
                listPedidos=pedidoService.getListDetaPedido(String.valueOf(numPedi),codSeriPedi,tipDocuPedi);
            }
            
            for(PedidoTvManagerImpl  bean : listPedidos){
                logger.info(" eltipo de documento :"+ bean.getTipDocuPedi());
                if(bean.getCodSeriPedi().equals(codSeriPedi) &  bean.getNumPedi().equals(numPedi) & bean.getTipDocuPedi().equals(tipDocuPedi) ){
                    request.getSession(false).setAttribute("pedidoSelected", bean);
                    break;
                }
            }
            request.getSession(false).setAttribute("listEstPedido", listEstPedido);
          }catch(Exception e ){
              e.printStackTrace();
          }
          return FORM_PEDIDO_DETA_VIEW;
        }
        
        
        
  //

      /*  @RequestMapping(params="accion=mostrar")
        private String mostrar (ModelMap model,@ModelAttribute(FORM_KEY) HMF3005Form form, HttpServletRequest request) throws Exception {    
        
           HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            List listaTransacciones = (List)session.getAttribute("listaMenu2");
            if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.CONSUL_PEDIDO)) {
                return FORM_ACCESS_NULL_VIEW;
            }    
            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            
            //int accionMapa = 1;
            String cliente = (String)request.getSession().getAttribute("cliente");
            String sucursal = (String)request.getSession().getAttribute("sucursal");
            
            try {


               /*  //int accionMapa = 3;

                    PedidosBean detallePedido = new PedidosBean();
                    String serie = form.getSerie().toUpperCase();
                    String pedido = form.getPedido();
                    form.setCantidadActual("1");
                    try {
                        detallePedido = 
                                servicioHermetic.getPedido(sucursal, cliente, 
                                                                 serie, pedido);

                        model.put("serie", serie);
                        model.put("pedido", pedido);

                        if (detallePedido != null) {
                            model.put("detallePedido", detallePedido);

                            DetallePedidoBean detallePedidoSecuencia = 
                                new DetallePedidoBean();
                            detallePedidoSecuencia = 
                                    servicioHermetic.getDetallePedidoSecuencia(sucursal, 
                                                                                     cliente, 
                                                                                     detallePedido.getCodCuentaOrigen(), 
                                                                                     detallePedido.getTipoDocu(), 
                                                                                     detallePedido.getSerie(), 
                                                                                     detallePedido.getPedido(), 
                                                                                     "1");
                            if (detallePedidoSecuencia != null) {

                                model.put("detallePedidoSecuencia", 
                                                     detallePedidoSecuencia);
                                
                                int cantidadPedidos = servicioHermetic.getCantidadPedidos(detallePedido.getTipoDocu(), 
                                                                                               detallePedido.getSerie(), 
                                                                                               detallePedido.getPedido());

                                model.put("cantidadPedidos", cantidadPedidos);
                                form.setCantidadPedidos(String.valueOf(cantidadPedidos));
                                
                                String cantidadActual = "1";

                                model.put("cantidadActual", cantidadActual);

                                List detalleDenominacionBillete = 
                                    servicioHermetic.getBilletesMonedas(detallePedido.getPedido(), 
                                                                              detallePedido.getSerie(), 
                                                                              cantidadActual, 
                                                                              "1", 
                                                                              detallePedidoSecuencia.getTipoUnidad());
                                model.put("detalleDenominacionBillete", 
                                                     detalleDenominacionBillete);
                                List detalleDenominacionMonedas = 
                                    servicioHermetic.getBilletesMonedas(detallePedido.getPedido(), 
                                                                              detallePedido.getSerie(), 
                                                                              cantidadActual, 
                                                                              "2", 
                                                                              detallePedidoSecuencia.getTipoUnidad());
                                model.put("detalleDenominacionMonedas", 
                                                     detalleDenominacionMonedas);
                            }
                        }
                    } catch (Exception e) {
                        model.put("serie", serie);
                        model.put("pedido", "");                        
                        logger.error("Error en el proceso. "+ e);
                        e.printStackTrace();
                    }


                model.put(FORM_KEY,form);  
                
            } catch (Exception e) {
                e.printStackTrace();
                //accionMapa = 0;
                return FORM_ERROR_VIEW;
            }

            return FORM_PEDIDO_VIEW;
        }*/

    @RequestMapping(params="accion=mostrar2")
           private String mostrar2 (ModelMap model,@ModelAttribute(FORM_KEY) HMF3005Form form, HttpServletRequest request) throws Exception {    
           
               HttpSession session = request.getSession(false);        
               if (request.getSession().getAttribute("usuario") == null)
                   return FORM_SESSION_FINISH;

               List listaTransacciones = (List)session.getAttribute("listaMenu2");
               if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.CONSUL_PEDIDO)) {
                   return FORM_ACCESS_NULL_VIEW;
               }    
               form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
               
               //int accionMapa = 1;
               String cliente = (String)request.getSession().getAttribute("cliente");
               String sucursal = (String)request.getSession().getAttribute("sucursal");
               
               try {
               
                   //int accionMapa = 3;
                   
                       PedidosBean detallePedido = new PedidosBean();
                       String serie = form.getSerie().toUpperCase();
                       String pedido = form.getPedido();
                       try {
                           int valor = Integer.parseInt(pedido);
                           detallePedido = 
                                   servicioHermetic.getPedido(sucursal, cliente, 
                                                                    serie, pedido);
                           request.setAttribute("serie", serie);
                           request.setAttribute("pedido", pedido);

                           if (detallePedido != null) {
                               request.setAttribute("detallePedido", detallePedido);

                               DetallePedidoBean detallePedidoSecuencia = 
                                   new DetallePedidoBean();
                               String cantidadActual = form.getCantidadActual();
                               detallePedidoSecuencia = 
                                       servicioHermetic.getDetallePedidoSecuencia(sucursal, 
                                                                                        cliente, 
                                                                                        detallePedido.getCodCuentaOrigen(), 
                                                                                        detallePedido.getTipoDocu(), 
                                                                                        detallePedido.getSerie(), 
                                                                                        detallePedido.getPedido(), 
                                                                                        cantidadActual);
                               if (detallePedidoSecuencia != null) {

                                   model.put("detallePedidoSecuencia", 
                                                        detallePedidoSecuencia);

                                   model.put("cantidadPedidos", 
                                                        form.getCantidadPedidos());

                                   model.put("cantidadActual", cantidadActual);

                                   List detalleDenominacionBillete = 
                                       servicioHermetic.getBilletesMonedas(detallePedido.getPedido(), 
                                                                                 detallePedido.getSerie(), 
                                                                                 cantidadActual, 
                                                                                 "1", 
                                                                                 detallePedidoSecuencia.getTipoUnidad());
                                   model.put("detalleDenominacionBillete", 
                                                        detalleDenominacionBillete);
                                   List detalleDenominacionMonedas = 
                                       servicioHermetic.getBilletesMonedas(detallePedido.getPedido(), 
                                                                                 detallePedido.getSerie(), 
                                                                                 cantidadActual, 
                                                                                 "2", 
                                                                                 detallePedidoSecuencia.getTipoUnidad());
                                   model.put("detalleDenominacionMonedas", 
                                                        detalleDenominacionMonedas);
                               }
                           }
                       } catch (Exception e) {
                           model.put("serie", serie);
                           model.put("pedido", "");
                           System.out.println(e.getMessage());
                           //accionMapa = 0;
                       }

                   
                   //return accionMapa;
                   //}

                   model.put(FORM_KEY,form);  
               } catch (Exception e) {
                   e.printStackTrace();
                   //accionMapa = 0;
                   return FORM_ERROR_VIEW;
               }

               return FORM_PEDIDO_VIEW;
           }

    @RequestMapping(params = {"accion=chks"}) 
    protected @ResponseBody Map chks( HttpServletRequest request ){
        logger.info("metodo : chks");
        String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
        String[] chksPunto =(String[])request.getSession(false).getAttribute("chksPunto");
        String[] chksBanco =(String[])request.getSession(false).getAttribute("chksBanco");
        String[] chksCuentasIS =(String[])request.getSession(false).getAttribute("chksCuentasIS");
        String[] chksClieCorp =(String[])request.getSession(false).getAttribute("chksClieCorp");
        Map mp = new HashMap();
        mp.put("chksSucu", Util.contDatosSession(chksSucu));
        mp.put("chksPunto", Util.contDatosSession(chksPunto));
        mp.put("chksBanco", Util.contDatosSession(chksBanco));
        mp.put("chksCuentasIS", Util.contDatosSession(chksCuentasIS));
        mp.put("chksClieCorp", Util.contDatosSession(chksClieCorp));
        return mp;
    }
    
      @RequestMapping(params = {"accion=chekSession","chks"}) 
      protected @ResponseBody Integer chekSession(@RequestParam("chks") String chks,HttpServletRequest request ){
          logger.info("metodo : chekSession");
          String[] stringChks = (String[])request.getSession(false).getAttribute(chks);
          return Util.contDatosSession(stringChks);
      }
}
